home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / TESTDLL.PAK / EMBFORM.PAS next >
Pascal/Delphi Source File  |  1997-05-06  |  2KB  |  85 lines

  1. unit EmbForm;
  2.  
  3. interface
  4. uses
  5.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  6.   StdCtrls, ComCtrls;
  7.   
  8. type                           
  9.   TEmbeddableForm = class(TForm)
  10.   private
  11.     { Private declarations }
  12.     FParentHandle: HWND;
  13.     DestroyingForRecreate: Boolean;
  14.     FNeedsToShow: Boolean;
  15.     procedure CreateParams(var Params: TCreateParams); override;
  16.     procedure DestroyWnd; override;
  17.     procedure WMNCDestroy(var Message: TWMNCDestroy); message WM_NCDESTROY;
  18.     procedure SetParentHandle( hWndParent: HWND );
  19.     procedure SetVisible(Value: Boolean);
  20.   public
  21.     { Public declarations }
  22.     constructor Create(AOwner: TComponent); override;
  23.     property ParentHandle: HWND read FParentHandle write SetParentHandle;
  24.   published
  25.     property Visible write SetVisible default False;
  26.   end;
  27.  
  28. implementation
  29.  
  30. constructor TEmbeddableForm.Create(AOwner: TComponent);
  31. begin                     
  32.     DestroyingForRecreate := False;
  33.     FNeedsToShow := False;
  34.     FParentHandle := 0;
  35.     inherited Create(AOwner);
  36. end;
  37.     
  38. procedure TEmbeddableForm.CreateParams(var Params: TCreateParams);
  39. begin
  40.     inherited CreateParams(Params);
  41.     with Params do
  42.     begin
  43.         WndParent := FParentHandle;
  44.         // if there is a parent, then set the style, too
  45.         if FParentHandle <> 0 then
  46.             Style := (Style or WS_CHILD) and (not WS_POPUP);
  47.     end;
  48. end;
  49.  
  50. procedure TEmbeddableForm.DestroyWnd; 
  51. begin
  52.     DestroyingForRecreate := True;
  53.     inherited;
  54.     DestroyingForRecreate := False;
  55. end;   
  56.  
  57. procedure TEmbeddableForm.WMNCDestroy(var Message: TWMNCDestroy);
  58. begin
  59.     inherited;
  60.     if not DestroyingForRecreate then
  61.         Free;
  62. end;
  63.  
  64. procedure TEmbeddableForm.SetVisible( Value: Boolean); 
  65. begin
  66.     if FParentHandle = 0 then
  67.         FNeedsToShow := Value
  68.     else
  69.         inherited Visible := Value;
  70. end;
  71.  
  72. procedure TEmbeddableForm.SetParentHandle( hWndParent: HWND );
  73. var needShow: Boolean;
  74. begin
  75.     // If it was hidden because there was no parent,
  76.     // we will need to show it after we set its parent.
  77.     needShow := (FParentHandle = 0) and FNeedsToShow;
  78.     FParentHandle := hWndParent;
  79.     RecreateWnd;
  80.     if needShow then
  81.       Visible := True;
  82. end;
  83.  
  84. end.
  85.